package io.github.talelin.latticy.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import io.github.talelin.latticy.dto.category.CategoryDTO;
import io.github.talelin.latticy.dto.category.CategoryPageDTO;
import io.github.talelin.latticy.dto.category.UpdateCategoryDTO;
import io.github.talelin.latticy.model.CategoryDO;
import io.github.talelin.latticy.vo.CategoryVO;

import java.util.List;

/**
 * 品类管理
 * <p>
 * ClassName CategoryService
 * Description
 * Create by zcy
 * Date 2022-06-09
 */
public interface CategoryService extends IService<CategoryDO> {


    /**
     * 新增品类
     *
     * @param categoryDTO
     */
    void createCategory(CategoryDTO categoryDTO);


    /**
     * 修改品类
     *
     * @param id
     * @param updateCategoryDTO
     */
    void updateCategory(Integer id, UpdateCategoryDTO updateCategoryDTO);


    /**
     * 删除品类
     *
     * @param id
     */
    void deleteCategory(Integer id);

    /**
     * 分页查询
     *
     * @param categoryPageDTO
     * @return
     */
    IPage<CategoryDO> getCategoryPage(CategoryPageDTO categoryPageDTO);

    IPage<CategoryDO> getCategoryPage(Integer count, Integer page, Integer root);

    IPage<CategoryDO> getSubCategoriesByPage(Integer count, Integer page, Integer id);

    /**
     * 查询树形结构
     *
     * @return
     */
    List<CategoryVO> getCategoryTree();

    /**
     * 查询当前id的所有父级id
     *
     * @param id
     * @return
     */
    List<Integer> findParentId(Integer id);

    /**
     * 校验品类名称是否存在
     *
     * @param id           主键id
     * @param categoryName 品类名称
     * @return true代表存在
     */
    boolean checkCategoryExistByName(int id, String categoryName);


    /**
     * 校验品类名称是否存在
     *
     * @param categoryName 品类名称
     * @return true代表存在
     */
    boolean checkCategoryExistByName(String categoryName);

    /**
     * 校验品类名称是否存在
     *
     * @param categoryEnglishName 品类英文名称
     * @return true代表存在
     */
    boolean checkCategoryExistByEnglishName(String categoryEnglishName);

    /**
     * 校验品类名称是否存在
     *
     * @param id                  主键id
     * @param categoryEnglishName 品类英文名称
     * @return true代表存在
     */
    boolean checkCategoryExistByEnglishName(int id, String categoryEnglishName);
}
